using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
namespace Entidades
{
    public class Postulacion
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Postulacion), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Postulacion), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Postulacion), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Postulacion), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Postulacion), ";
        private int _Id;
        private int _IdUsuario;
        private int _IdCategoria;
        private string _Descripcion;
        private DateTime? _FechaAlta;
        private int _IdLocalidad;

        private string _Titulo;
        #region "Propiedades"
        public int Id
        {
            get { return _Id; }
            set { _Id = value; }
        }
        public int IdUsuario
        {
            get { return _IdUsuario; }
            set { _IdUsuario = value; }
        }
        public int IdCategoria
        {
            get { return _IdCategoria; }
            set { _IdCategoria = value; }
        }
        public string Descripcion
        {
            get { return _Descripcion; }
            set { _Descripcion = value; }
        }
        public DateTime? FechaAlta
        {
            get { return _FechaAlta; }
            set { _FechaAlta = value; }
        }
        public string Titulo
        {
            get { return _Titulo; }
            set { _Titulo = value; }
        }

        public Int32 IdLocalidad
        {
            get { return _IdLocalidad; }
            set { _IdLocalidad = value; }
        }
        #endregion
        #region "Lazys"
        private List<Contratacion> _Contrataciones;
        public List<Contratacion> Contrataciones
        {
            get
            {
                if (_Contrataciones == null)
                {
                    _Contrataciones = Contratacion.getAllByIdPostulacion(_Id);
                }
                return _Contrataciones;
            }
        }
        private List<EdicionesPostulacion> _EdicionesPostulaciones;
        public List<EdicionesPostulacion> EdicionesPostulaciones
        {
            get
            {
                if (_EdicionesPostulaciones == null)
                {
                    _EdicionesPostulaciones = EdicionesPostulacion.getAllByIdPostulacion(_Id);
                }
                return _EdicionesPostulaciones;
            }
        }
        private List<EstadosPostulacion> _EstadosPostulaciones;
        public List<EstadosPostulacion> EstadosPostulaciones
        {
            get
            {
                if (_EstadosPostulaciones == null)
                {
                    _EstadosPostulaciones = EstadosPostulacion.getAllByIdPostulacion(_Id);
                }
                return _EstadosPostulaciones;
            }
        }
        private List<Pregunta> _Preguntas;
        public List<Pregunta> Preguntas
        {
            get
            {
                if (_Preguntas == null)
                {
                    _Preguntas = Pregunta.getAllByIdPostulacion(_Id);
                }
                return _Preguntas;
            }
        }
        private List<Recomendacion> _Recomendaciones;
        public List<Recomendacion> Recomendaciones
        {
            get
            {
                if (_Recomendaciones == null)
                {
                    _Recomendaciones = Recomendacion.getAllByIdPostulacion(_Id);
                }
                return _Recomendaciones;
            }
        }
        private Usuario _Usuario;
        public Usuario Usuario
        {
            get
            {
                if (_Usuario == null)
                {
                    _Usuario = new Usuario(_IdUsuario);
                }
                return _Usuario;
            }
        }
        private Categoria _Categoria;
        public Categoria Categoria
        {
            get
            {
                if (_Categoria == null)
                {
                    _Categoria = new Categoria(_IdCategoria);
                }
                return _Categoria;
            }
        }
        private Localidad _Localidad;
        public Localidad Localidad
        {
            get
            {
                if (_Localidad == null)
                {
                    _Localidad = new Localidad(_IdLocalidad);
                }
                return _Localidad;
            }
        }
        #endregion
        public Postulacion()
        {
            _Descripcion = "";
        }
        public Postulacion(int Id)
        {
            Postulacion postulacion = traerUno(Id);
            this._Id = postulacion.Id;
            this._IdUsuario = postulacion.IdUsuario;
            this._IdCategoria = postulacion.IdCategoria;
            this._Descripcion = postulacion.Descripcion;
            this._FechaAlta = postulacion.FechaAlta;
            this._Titulo = postulacion.Titulo;
            this._IdLocalidad = postulacion.IdLocalidad;
        }
        #region "Metodos Publicos"
        public void Alta()
        {
            try
            {
                validaAlta();
                DALPostulacion.Alta(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public void Baja()
        {
            try
            {
                validaBaja();
                DALPostulacion.Baja(_Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public void Modificar()
        {
            try
            {
                validaModificacion();
                DALPostulacion.Modificar(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        #region "Metodos Estaticos"
        private Postulacion traerUno(int Id)
        {
            try
            {
                return DALPostulacion.traerUno(Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerUno + ex.Message);
            }
        }
        public static List<Postulacion> TraerTodos()
        {
            try
            {
                return DALPostulacion.TraerTodos();
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }

        public static List<Postulacion> WSgetallByName(string descripcion)
        {
            try
            {
                return DALPostulacion.WSgetallByName(descripcion);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }
        public static List<Postulacion> getAllByTitulo(string titulo)
        {
            try
            {
                return DALPostulacion.getAllByTitulo(titulo);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }

        internal static int getCantidadPorCategoria(int idCategoria)
        {
            try
            {
                return DALPostulacion.getCantidadPorCategoria(idCategoria);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo traer la cantidad " + ex.Message);
            }
        }

        public static List<Postulacion> traerUltimas()
        {
            return DALPostulacion.traerUltimas();
        }

        #region "Lazys"
        public static void getAllByIdCategoria(ref List<Postulacion> lista, int IdCategoria, int pagina, int cantxPagina, ref int Paginas)
        {
            try
            {
                DALPostulacion.getAllByIdCategoria(ref lista, IdCategoria, pagina, cantxPagina,ref Paginas);
            }
            catch (Exception ex)
            {
                throw new Exception("ErrorDeLazyLoad(Postulacion)" + ex.Message);
            }
        }
        


        public static List<Postulacion> getAllByIdUsuario(int IdUsuario)
        {
            try
            {
                return DALPostulacion.getAllByIdUsuario(IdUsuario);
            }
            catch (Exception ex)
            {
                throw new Exception("ErrorDeLazyLoad(Postulacion)" + ex.Message);
            }
        }

        
        #endregion
        #endregion
        #endregion
        #region "Metodos Privados"
        private void validaAlta()
        {

        }
        private void validaBaja()
        {
        }
        private void validaModificacion()
        {
            validaAlta();
        }
        #endregion


       
    }
}

